package com.tedu.pj.goods.dao;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 此对象为一个商品数据层访问对象，现在要求在此类中定义一个方法，这个方法用于从数据库获取商品信息，
 * 并将其封装到map集合（字段名，值），要求一行记录一个map对象
 * 多个map存储到list集合。
 *
 * @author Song
 * @since 2020/9/28
 */
@Repository
public class DefaultGoodsDao implements GoodsDao{


    @Autowired
    DataSource dataSource;

    /**
     * 获取商品信息
     * @return
     */
    @Override
    public List<Map<String,Object>> findGoods(){
        /**
         * 获取连接
         * 创建statement对象
         * 发送sql
         * 处理结果
         * 释放资源
         */
        Connection connection = null;
        Statement statement=null;
        ResultSet resultSet=null;
        List<Map<String,Object>> list = new ArrayList<>();
        try {
            connection = dataSource.getConnection();
             statement = connection.createStatement();resultSet = statement.executeQuery("SELECT * FROM tb_goods");
            while (resultSet.next()){
                Map<String,Object> map = new HashMap<>();
                map.put("id",resultSet.getInt("id"));
                map.put("name",resultSet.getString("name"));
                map.put("remark",resultSet.getString("remark"));
                map.put("createdTime", resultSet.getDate("createdTime"));
                list.add(map);
            }
        }catch (SQLException e){
            e.printStackTrace();
        }
        finally {
            try {
                if (resultSet!=null){resultSet.close();}
            }catch (Exception e){
                e.printStackTrace();
            }
            try {
                if (statement!=null){statement.close();}
            }catch (Exception e){
                e.printStackTrace();
            }
            try {
                //这里的连接返回到池中

                if (connection!=null){connection.close();}
            }catch (Exception e){
                e.printStackTrace();
            }
        }

        return list;
    }
}
